<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" v-model="isAll" />
    <button @click="btn">反选</button>
    <ul>
      <li v-for="item in arr" :key="item.name">
        <input type="checkbox" v-model="item.c" />
        <span>{{ item.name }}</span>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      arr: [
        { name: "猪八戒", c: false, },
        { name: "孙悟空", c: false, },
        { name: "唐僧", c: false, },
        { name: "白龙马", c: false, },
      ],
    };
  },
  computed: {
    // isAll(){
    //   // every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。
    //   // 它返回一个布尔值。
    //   //    每一个都通过测试函数，返回 true
    //   //    碰到没通过测试函数的，就返回 false，并停止
    //   return this.arr.every(item => item.c === true)
    // }
    isAll: {
      // isAll 值更新时
      set(val){
        // console.log('你修改了isAll的值', val);
        this.arr.forEach(item => item.c = val)
      },
      // isAll 值获取，💥记得写 return
      get(){
        return this.arr.every(item => item.c === true)
      }
    }
  },
  methods: {
    btn(){
      // 遍历所有对象, 把对象的c属性取相反值赋予回去即可
      this.arr.forEach(item=> item.c = !item.c)
    }
  }
};
</script>